/*
 * IkaSprite.h
 */

#ifndef IKASPRITE_H_
#define IKASPRITE_H_

#include "atomic/IkaCore.h"
#include "atomic/IkaPoint.h"
#include "atomic/IkaAnim.h"
#include "atomic/IkaGraphic.h"

namespace data {

class IkaSprite: public atomic::IkaCore {
public:
	IkaSprite();
	virtual ~IkaSprite();
	IkaSprite(const data::IkaSprite &copy);
	IkaSprite(atomic::IkaAnim graphic, float x, float y, bool animated, bool reverse, unsigned int width, unsigned int height , unsigned int color);
	void Update();
	void Init();
	void Hurt(float damages);
	void OverLapArray(data::IkaSprite sprites[]);
	void OverLapArrays(data::IkaSprite sprites1[], data::IkaSprite sprites2[]);
	void AddAnimation(std::string name, atomic::IkaGraphic frames[], float frameRate, bool looped);
	void Play(std::string animName, bool forced);
	void Facing(bool isRight);
	void RandomFrame();

	bool FacingRight();
    bool Finished();
    atomic::IkaPoint Acceleration();
    float Angle();
    float AngularAcceleration();
    float AngularDrag();
    float AngularVelocity();
    atomic::IkaPoint Drag();
    float Health();
    float MaxAngular();
    float MaxTrust();
    atomic::IkaPoint MaxVelocity();
    atomic::IkaPoint OffSet();
    float Thrust();
    atomic::IkaPoint Velocity();

    void SetFacingRight(bool facingRight);
    void SetFinished(bool finished);
    void SetAcceleration(atomic::IkaPoint acceleration);
    void SetAngle(float angle);
    void SetAngularAcceleration(float angularAcceleration);
    void SetAngularDrag(float angularDrag);
    void SetAngularVelocity(float angularVelocity);
    void SetAnims(atomic::IkaAnim anims[]);
    void SetDrag(atomic::IkaPoint drag);
    void SetHealth(float health);
    void SetMaxAngular(float maxAngular);
    void SetMaxTrust(float maxTrust);
    void SetMaxVelocity(atomic::IkaPoint maxVelocity);
    void SetOffSet(atomic::IkaPoint offSet);
    void SetThrust(float thrust);
    void SetVelocity(atomic::IkaPoint velocity);

private:
	atomic::IkaPoint myOffSet;
	atomic::IkaPoint myVelocity;
	atomic::IkaPoint myAcceleration;
	atomic::IkaPoint myDrag;
	atomic::IkaPoint myMaxVelocity;
	float myAngle;
	float myAngularVelocity;
	float myAngularAcceleration;
	float myAngularDrag;
	float myMaxAngular;
	float myThrust;
	float myMaxTrust;
	float myHealth;
	bool isFinished;
	bool isFacingRight;
	atomic::IkaArray<atomic::IkaAnim> *myAnims;


};

}

#endif /* IKASPRITE_H_ */
